HR Analytics Employee Attrition and Performance

BCon 147: special topics

Author

Jean Japon

Published

October 25, 2024

1 Project overiew

In this project, we will explore employee attrition and performance using the HR Analytics Employee Attrition & Performance dataset. The primary goal is to develop insights into the factors that contribute to employee attrition. By analyzing a range of factors, including demographic data, job satisfaction, work-life balance, and job role, we aim to help businesses identify key areas where they can improve employee retention.

2 Scenario

Imagine you are working as a data analyst for a mid-sized company that is experiencing high employee turnover, especially among high-performing employees. The company has been facing increased costs related to hiring and training new employees, and management is concerned about the negative impact on productivity and morale. The human resources (HR) team has collected historical employee data and now looks to you for actionable insights. They want to understand why employees are leaving and how to retain talent effectively.

Your task is to analyze the dataset and provide insights that will help HR prioritize retention strategies. These strategies could include interventions like revising compensation policies, improving job satisfaction, or focusing on work-life balance initiatives. The success of your analysis could lead to significant cost savings for the company and an increase in employee engagement and performance.

3 Understanding data source

The dataset used for this project provides information about employee demographics, performance metrics, and various satisfaction ratings. The dataset is particularly useful for exploring how factors such as job satisfaction, work-life balance, and training opportunities influence employee performance and attrition.

This dataset is well-suited for conducting in-depth analysis of employee performance and retention, enabling us to build predictive models that identify the key drivers of employee attrition. Additionally, we can assess the impact of various organizational factors, such as training and work-life balance, on both performance and retention outcomes.

## datatable function from DT package create an HTML widget display of the dataset
## install DT package if the package is not yet available in your R environment
readxl::read_excel("dataset/dataset-variable-description.xlsx") |> 
  DT::datatable()

4 Data wrangling and management

Libraries

Task: Load the necessary libraries

Before we start working on the dataset, we need to load the necessary libraries that will be used for data wrangling, analysis and visualization. Make sure to load the following libraries here. For packages to be installed, you can use the install.packages function. There are packages to be installed later on this project, so make sure to install them as needed and load them here.

library(tidyverse)
library(readxl)
library(janitor)
library(lubridate)
library(tidytext)
library(haven)
library(foreign)
library(ggrepel)
library(ggwordcloud)
library(wordcloud2)
library(ggplot2)
library(magrittr)
library(DT)
# load all your libraries here

4.1 Data importation

Task 4.1. Merging dataset
  • Import the two dataset Employee.csv and PerformanceRating.csv. Save the Employee.csv as employee_dta and PerformanceRating.csv as perf_rating_dta.

  • Merge the two dataset using the left_join function from dplyr. Use the EmployeeID variable as the varible to join by. You may read more information about the left_join function here.

  • Save the merged dataset as hr_perf_dta and display the dataset using the datatable function from DT package.

## import the two data here
employee_dta <- read.csv("~/midterm-bcon147-project-exercise-20241010T050421Z-001/midterm-bcon147-project-exercise/dataset/Employee.csv")
perf_rating_dta <- read.csv("~/midterm-bcon147-project-exercise-20241010T050421Z-001/midterm-bcon147-project-exercise/dataset/PerformanceRating.csv")


## merge employee_dta and perf_rating_dta using left_join function.
merged_data <- left_join(employee_dta, perf_rating_dta, by = "EmployeeID")
## save the merged dataset as hr_perf_dta
hr_perf_dta <- merged_data


datatable(hr_perf_dta)

4.2 Data management

Task 4.2. Standardizing variable names
  • Using the clean_names function from janitor package, standardize the variable names by using the recommended naming of variables.

  • Save the renamed variables as hr_perf_dta to update the dataset.

## clean names using the janitor packages and save as hr_perf_dta
hr_perf_dta <- hr_perf_dta %>% clean_names()

## display the renamed hr_perf_dta using datatable function
datatable(hr_perf_dta)
Task 4.2. Recode data entries
  • Create a new variable cat_education wherein education is 1 = No formal education; 2 = High school; 3 = Bachelor; 4 = Masters; 5 = Doctorate. Use the case_when function to accomplish this task.

  • Similarly, create new variables cat_envi_sat, cat_job_sat, and cat_relation_sat for environment_satisfaction, job_satisfaction, and relationship_satisfaction, respectively. Re-code the values accordingly as 1 = Very dissatisfied; 2 = Dissatisfied; 3 = Neutral; 4 = Satisfied; and 5 = Very satisfied.

  • Create new variables cat_work_life_balance, cat_self_rating, cat_manager_rating for work_life_balance, self_rating, and manager_rating, respectively. Re-code accordingly as 1 = Unacceptable; 2 = Needs improvement; 3 = Meets expectation; 4 = Exceeds expectation; and 5 = Above and beyond.

  • Create a new variable bi_attrition by transforming attrition variable as a numeric variabe. Re-code accordingly as No = 0, and Yes = 1.

  • Save all the changes in the hr_perf_dta. Note that saving the changes with the same name will update the dataset with the new variables created.

## create cat_education
print(names(hr_perf_dta))
 [1] "employee_id"                        "first_name"                        
 [3] "last_name"                          "gender"                            
 [5] "age"                                "business_travel"                   
 [7] "department"                         "distance_from_home_km"             
 [9] "state"                              "ethnicity"                         
[11] "education"                          "education_field"                   
[13] "job_role"                           "marital_status"                    
[15] "salary"                             "stock_option_level"                
[17] "over_time"                          "hire_date"                         
[19] "attrition"                          "years_at_company"                  
[21] "years_in_most_recent_role"          "years_since_last_promotion"        
[23] "years_with_curr_manager"            "performance_id"                    
[25] "review_date"                        "environment_satisfaction"          
[27] "job_satisfaction"                   "relationship_satisfaction"         
[29] "training_opportunities_within_year" "training_opportunities_taken"      
[31] "work_life_balance"                  "self_rating"                       
[33] "manager_rating"                    
hr_perf_dta$education <- trimws(hr_perf_dta$education)
hr_perf_dta <- hr_perf_dta %>%
  mutate(cat_education = case_when(
    education == "No formal education" ~ 1,
    education == "High school" ~ 2,
    education == "Bachelor" ~ 3,
    education == "Masters" ~ 4,
    education == "Doctorate" ~ 5,
    TRUE ~ NA_real_
  ))

## create cat_envi_sat,  cat_job_sat, and cat_relation_sat
r_perf_dta <- hr_perf_dta %>%
  mutate(
    cat_envi_sat = case_when(
      environment_satisfaction == "Very dissatisfied" ~ 1,
      environment_satisfaction == "Dissatisfied" ~ 2,
      environment_satisfaction == "Neutral" ~ 3,
      environment_satisfaction == "Satisfied" ~ 4,
      environment_satisfaction == "Very satisfied" ~ 5,
      TRUE ~ NA_real_  # Handle any unexpected values
    ),
    cat_job_sat = case_when(
      job_satisfaction == "Very dissatisfied" ~ 1,
      job_satisfaction == "Dissatisfied" ~ 2,
      job_satisfaction == "Neutral" ~ 3,
      job_satisfaction == "Satisfied" ~ 4,
      job_satisfaction == "Very satisfied" ~ 5,
      TRUE ~ NA_real_
    ),
    cat_relation_sat = case_when(
      relationship_satisfaction == "Very dissatisfied" ~ 1,
      relationship_satisfaction == "Dissatisfied" ~ 2,
      relationship_satisfaction == "Neutral" ~ 3,
      relationship_satisfaction == "Satisfied" ~ 4,
      relationship_satisfaction == "Very satisfied" ~ 5,
      TRUE ~ NA_real_
    )
  )

  ## create cat_work_life_balance, cat_self_rating, and cat_manager_rating
r_perf_dta <- hr_perf_dta %>%
  mutate(
    cat_work_life_balance = case_when(
      work_life_balance == "Very bad" ~ 1,
      work_life_balance == "Bad" ~ 2,
      work_life_balance == "Neutral" ~ 3,
      work_life_balance == "Good" ~ 4,
      work_life_balance == "Very good" ~ 5,
      TRUE ~ NA_real_  # Handle any unexpected values
    ),
    cat_self_rating = case_when(
      self_rating == "Very poor" ~ 1,
      self_rating == "Poor" ~ 2,
      self_rating == "Average" ~ 3,
      self_rating == "Good" ~ 4,
      self_rating == "Excellent" ~ 5,
      TRUE ~ NA_real_
    ),
    cat_manager_rating = case_when(
      manager_rating == "Very poor" ~ 1,
      manager_rating == "Poor" ~ 2,
      manager_rating == "Average" ~ 3,
      manager_rating == "Good" ~ 4,
      manager_rating == "Excellent" ~ 5,
      TRUE ~ NA_real_
    )
  )


## create bi_attrition
hr_perf_dta <- hr_perf_dta %>%
  mutate(
    bi_attrition = case_when(
      attrition == "Yes" ~ 1,   # Assuming 'attrition' column has "Yes" for employees who left
      attrition == "No" ~ 0,    # Assuming 'attrition' column has "No" for employees still employed
      TRUE ~ NA_real_            # Handle any unexpected values
    )
  )


## print the updated hr_perf_dta using datatable function
datatable(hr_perf_dta)

5 Exploratory data analysis

5.1 Descriptive statistics of employee attrition

Task 5.1. Breakdown of attrition by key variables
  • Select the variables attrition, job_role, department, age, salary, job_satisfaction, and work_life_balance. Save as attrition_key_var_dta.

  • Compute and plot the attrition rate across job_role, department, and age, salary, job_satisfaction, and work_life_balance. To compute for the attrition rate, group the dataset by job role. Afterward, you can use the count function to get the frequency of attrition for each job role and then divide it by the total number of observations. Save the computation as pct_attrition. Do not forget to ungroup before storing the output. Store the output as attrition_rate_job_role.

  • Plot for the attrition rate across job_role has been done for you! Study each line of code. You have the freedom to customize your plot accordingly. Show your creativity!

## selecting attrition key variables and save as attrition_key_var_dta
attrition_key_var_dta <- hr_perf_dta %>%
  select(attrition, job_role, department, age, salary, job_satisfaction, work_life_balance)


# Compute attrition rate by job_role
attrition_rate_job_role <- employee_dta %>%
  group_by(JobRole) %>%
  summarise(
    total_employees = n(),
    total_attrition = sum(Attrition == "Yes", na.rm = TRUE)
  ) %>%
  mutate(pct_attrition = total_attrition / total_employees * 100) %>%
  ungroup()
# Ungroup the dataset
# Print the attrition_rate_job_role
datatable(attrition_rate_job_role)
# Attrition Rate by Department
attrition_rate_department <- employee_dta %>%
  group_by(Department) %>%
  summarise(
    total_employees = n(),
    total_attrition = sum(Attrition == "Yes", na.rm = TRUE)
  ) %>%
  mutate(pct_attrition = total_attrition / total_employees * 100) %>%
  ungroup()
# Print Attrition Rate Department
datatable(attrition_rate_department)
# Step 3: Compute attrition rate by Age Group
attrition_rate_age <- employee_dta %>%
  mutate(age_group = cut(Age, breaks = c(20, 30, 40, 50, 60), labels = c("20-30", "31-40", "41-50", "51-60"))) %>%
  group_by(age_group) %>%
  summarise(
    total_employees = n(),
    total_attrition = sum(Attrition == "Yes", na.rm = TRUE)
  ) %>%
  mutate(pct_attrition = total_attrition / total_employees * 100) %>%
  ungroup()
#Print Attrition Rate Age
datatable(attrition_rate_age)
# Step 4: Compute attrition rate by Salary
# Create salary groups in thousands 
attrition_key_var_dta <- attrition_key_var_dta %>%
  mutate(salary_group = cut(salary / 1000, 
                            breaks = c(20, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550),  # Specify breaks in thousands
                            right = FALSE,  # Use left-closed intervals
                            labels = c("20K-49K", "50K-99K", "100K-149K", "150K-199K", "200K-249K", "250K-299K", "300K-349K", "350K-399K", "400K-449K", "450K-499K", "500K-549K")))  
# Compute the attrition rate by salary group
attrition_rate_salary <- attrition_key_var_dta %>%
  group_by(salary_group) %>%
  summarize(
    attrition_count = sum(attrition == "Yes", na.rm = TRUE),
    total_count = n(),
    pct_attrition = attrition_count / total_count * 100
  ) %>%
  ungroup()

# Print Attrition Rate Salary
datatable(attrition_rate_salary)
# Step 5: Compute attrition rate by Job Satisfaction
attrition_rate_satisfaction <- hr_perf_dta %>%
  group_by(job_satisfaction) %>%
  summarise(
    total_employees = n(),
    total_attrition = sum(attrition == "Yes", na.rm = TRUE)
  ) %>%
  mutate(pct_attrition = total_attrition / total_employees * 100) %>%
  ungroup()
#Print Attrition Rate Satisfaction
datatable(attrition_rate_satisfaction)
#Compute attrition rate by Work Life Balance
attrition_rate_work_life <- hr_perf_dta %>%
  group_by(work_life_balance) %>%
  summarise(
    total_employees = n(),
    total_attrition = sum(attrition == "Yes", na.rm = TRUE)
  ) %>%
  mutate(pct_attrition = total_attrition / total_employees * 100) %>%
  ungroup()
#Print Attrition Rate Work Life Balance
datatable(attrition_rate_work_life)
## print attrition_rate_job_role
print(attrition_rate_job_role)
# A tibble: 13 × 4
   JobRole                   total_employees total_attrition pct_attrition
   <chr>                               <int>           <int>         <dbl>
 1 Analytics Manager                      52               3          5.77
 2 Data Scientist                        261              62         23.8 
 3 Engineering Manager                    75               2          2.67
 4 HR Business Partner                     7               0          0   
 5 HR Executive                           28               3         10.7 
 6 HR Manager                              4               0          0   
 7 Machine Learning Engineer             146              10          6.85
 8 Manager                                37               2          5.41
 9 Recruiter                              24               9         37.5 
10 Sales Executive                       327              57         17.4 
11 Sales Representative                   83              33         39.8 
12 Senior Software Engineer              132               9          6.82
13 Software Engineer                     294              47         16.0 
## Plot the attrition rate

ggplot(attrition_rate_job_role, aes(x = JobRole, y = pct_attrition, fill = JobRole)) +
  geom_bar(stat = "identity") +
  labs(title = "Attrition Rate by Job Role", x = "Job Role", y = "Attrition Rate (%)") +
  theme_light() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Plot attrition rate by Department
ggplot(attrition_rate_department, aes(x = Department, y = pct_attrition, fill = Department)) +
  geom_bar(stat = "identity") +
  labs(title = "Attrition Rate by Department", x = "Department", y = "Attrition Rate (%)") +
  theme_minimal()

# Plot attrition rate by Age Group
ggplot(attrition_rate_age, aes(x = age_group, y = pct_attrition, fill = age_group)) +
  geom_bar(stat = "identity") +
  labs(title = "Attrition Rate by Age Group", x = "Age Group", y = "Attrition Rate (%)") +
  theme_minimal()

# Plot attrition rate by Salary
ggplot(attrition_rate_salary, aes(x = salary_group, y = pct_attrition, fill = salary_group)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(pct_attrition, 1), "%")),
            vjust = -0.5, size = 3.5) + 
  labs(title = "Attrition Rate by Salary Group (in Thousands)", 
       x = "Salary Group (in Thousands)", 
       y = "Attrition Rate (%)") +
  theme_classic() +
  theme(legend.position = "rigt")

# Plot attrition rate by Job Satisfaction
ggplot(attrition_rate_satisfaction, aes(x = job_satisfaction, y = pct_attrition)) +
  geom_bar(stat = "identity", fill = "Purple") +
  labs(title = "Attrition Rate by Job Satisfaction", x = "Job Satisfaction", y = "Attrition Rate (%)") +
  theme_minimal()

# Plot attrition rate by Work Life Balance
ggplot(attrition_rate_work_life, aes(x = work_life_balance, y = pct_attrition, fill = work_life_balance)) +
  geom_bar(stat = "identity") +
  labs(title = "Attrition Rate by Work Life Balance", x = "Work Life Balance", y = "Attrition Rate (%)") +
  theme_minimal()

5.2 Identifying attrition key drivers using correlation analysis

Task 5.2. Conduct a correlation analysis to identify key drivers
  • Conduct a correlation analysis of key variables: bi_attrition, salary, years_at_company, job_satisfaction, manager_rating, and work_life_balance. Use the cor() function to run the correlation analysis. Remove missing values using the na.omit() before running the correlation analysis. Save the output in hr_corr.

  • Use a correlation matrix or heatmap to visualize the relationship between these variables and attrition. You can use the GGally package and use the ggcorr function to visualize the correlation heatmap. You may explore this site for more information: ggcorr.

  • Discuss which factors seem most correlated with attrition and what that suggests about why employees are leaving.

## conduct correlation of key variables. 
hr_key_vars <- hr_perf_dta %>%
  select(bi_attrition, salary, years_at_company, job_satisfaction, manager_rating, work_life_balance)

hr_key_vars_clean <- na.omit(hr_key_vars)

hr_corr <- cor(hr_key_vars_clean)

## print hr_corr 
datatable(hr_corr)
## install GGally package and use ggcorr function to visualize the correlation
library(GGally)

hr_key_vars <- hr_perf_dta %>%
  select(bi_attrition, salary, years_at_company, job_satisfaction, manager_rating, work_life_balance)

hr_key_vars_clean <- na.omit(hr_key_vars)

ggcorr(hr_key_vars_clean, label = TRUE, label_round = 2, label_size = 3, hjust = 0.75, size = 3)

ggcorr(hr_key_vars_clean, 
       palette = "RdBu",
       label = TRUE, 
       label_round = 2, 
       label_size = 3, 
       hjust = 0.75, 
       size = 3)

Discussion:

Provide your discussion here.

The heatmap shows the correlation between attrition (`bi_attrition`) and other variables such as salary, years at the company, job satisfaction, manager rating, and work-life balance. The color scale indicates the strength and direction of the correlation, with red indicating a positive correlation and blue indicating a negative one. The values inside the boxes indicate the actual correlation coefficients.

Interpretation of each of the relationships based on the heatmap:

1) Salary and Attrition (0.22):

  • Positive Correlation: The correlation coefficient between salary and attrition is 0.22, which indicates a weak-to-moderate positive correlation.

  • Interpretation: A positive correlation suggests that employees with higher salaries are more likely to leave the company. This is somewhat counterintuitive because salary is generally thought of as a factor that increases employee retention. However, it might indicate that employees with higher salaries are more competitive in the job market and have better external opportunities, prompting them to leave for better positions or promotions that the current company cannot match.

2) Years at Company and Attrition (0.00):

  • No Correlation: The correlation coefficient between years at the company and attrition is 0.00, indicating no relationship between how long an employee has been with the company and their likelihood of leaving.

  • Interpretation: This could suggest that tenure does not play a significant role in determining whether employees stay or leave. Employees, whether new or long-tenured, might be influenced by other factors like work satisfaction or external opportunities rather than simply the length of time they’ve been with the company.

3) Job Satisfaction and Attrition (-0.02):

  • Negligible Negative Correlation: The correlation between job satisfaction and attrition is -0.02, which is an extremely weak negative correlation.

  • Interpretation: While job satisfaction is generally expected to be a key driver of employee retention, the very weak correlation suggests that other factors may play a stronger role in influencing attrition in this company. It’s possible that employees are leaving due to external factors or company-specific policies that outweigh job satisfaction, or that job satisfaction levels are relatively consistent among employees regardless of their decision to leave.

4) Manager Rating and Attrition (0.01):

  • Very Weak Positive Correlation: The correlation between manager rating and attrition is 0.01, indicating virtually no relationship between how well employees rate their managers and their likelihood of leaving.

  • Interpretation: This could suggest that the relationship between employees and their managers is not a critical factor in employee turnover. Other elements, like company culture, career advancement opportunities, or work-life balance, may be more important in this specific organization.

5) Work-Life Balance and Attrition (0.01):

  • Very Weak Positive Correlation: The correlation between work-life balance and attrition is 0.01, also suggesting a very weak positive correlation.

  • Interpretation: While work-life balance is often a major concern for employees, this analysis indicates that it has almost no correlation with attrition in this dataset. This could imply that employees might not be leaving due to work-life balance issues or that the company’s overall policies related to work-life balance are satisfactory across the board.

Based on this heatmap, salary appears to be the most strongly correlated variable with attrition, but even that correlation is weak at 0.22. This implies that salary has some influence on employees’ decision to leave the company, perhaps because those earning higher salaries are more attractive in the job market. Interestingly, traditional drivers of attrition like job satisfaction and work-life balance show almost no correlation with employee turnover in this dataset.

The weak correlations across most variables suggest that employee attrition might be driven by other factors not captured in this analysis, such as career advancement opportunities, company culture, or external market conditions. It’s also possible that the organization’s employees have relatively similar experiences in terms of these key variables, leading to minimal variation in the correlation analysis.

Recommendations:

Given the findings, here are a few areas the company might explore further:

  • Analyze external opportunities: If higher-paid employees are more likely to leave, this suggests they may be receiving attractive offers from other companies. The organization might consider conducting exit interviews or external benchmarking to better understand what opportunities are pulling these employees away.

  • Focus on factors not in the analysis: Since variables like job satisfaction and manager rating seem to have little effect on attrition, the company might want to investigate other factors such as growth opportunities, training programs, or organizational culture, which could be driving turnover.

  • Retention strategies for high-paid employees: If salary is a driver of attrition, offering non-monetary benefits such as more flexible work options, leadership roles, or professional development opportunities could help retain these employees.

This analysis highlights the complexity of employee turnover and suggests that further exploration into additional variables is needed to fully understand the drivers of attrition within this organization.

5.3 Predictive modeling for attrition

Task 5.3. Predictive modeling for attrition
  • Create a logistic regression model to predict employee attrition using the following variables: salary, years_at_company, job_satisfaction, manager_rating, and work_life_balance. Save the model as hr_attrition_glm_model. Print the summary of the model using the summary function.

  • Install the sjPlot package and use the tab_model function to display the summary of the model. You may read the documentation here on how to customize your model summary.

  • Also, use the plot_model function to visualize the model coefficients. You may read the documentation here on how to customize your model visualization.

  • Discuss the results of the logistic regression model and what they suggest about the factors that contribute to employee attrition.

## run a logistic regression model to predict employee attrition
## save the model as hr_attrition_glm_model
hr_attrition_glm_model <- glm(bi_attrition ~ salary + years_at_company + job_satisfaction + manager_rating + work_life_balance, 
                              data = hr_perf_dta, 
                              family = binomial)




## print the summary of the model using the summary function
summary(hr_attrition_glm_model)

Call:
glm(formula = bi_attrition ~ salary + years_at_company + job_satisfaction + 
    manager_rating + work_life_balance, family = binomial, data = hr_perf_dta)

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)    
(Intercept)        2.571e+00  2.173e-01  11.831   <2e-16 ***
salary            -3.633e-06  4.086e-07  -8.893   <2e-16 ***
years_at_company  -6.333e-01  1.476e-02 -42.919   <2e-16 ***
job_satisfaction   3.470e-02  3.186e-02   1.089    0.276    
manager_rating     5.071e-03  3.810e-02   0.133    0.894    
work_life_balance  2.587e-02  3.198e-02   0.809    0.419    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 8574.5  on 6708  degrees of freedom
Residual deviance: 4781.6  on 6703  degrees of freedom
  (190 observations deleted due to missingness)
AIC: 4793.6

Number of Fisher Scoring iterations: 5
## install sjPlot package and use tab_model function to display the summary of the model
library(sjPlot)
tab_model(hr_attrition_glm_model)
  bi attrition
Predictors Odds Ratios CI p
(Intercept) 13.08 8.56 – 20.07 <0.001
salary 1.00 1.00 – 1.00 <0.001
years at company 0.53 0.52 – 0.55 <0.001
job satisfaction 1.04 0.97 – 1.10 0.276
manager rating 1.01 0.93 – 1.08 0.894
work life balance 1.03 0.96 – 1.09 0.419
Observations 6709
R2 Tjur 0.502
## use plot_model function to visualize the model coefficients
plot_model(hr_attrition_glm_model, 
           type = "est",               
           show.values = TRUE,
           show.p = TRUE,               
           value.offset = 0.2,          
           vline.color = "lightsalmon", 
           ci.lvl = 0.95,               
           title = "Model Coefficients",
           axis.labels = c("Work-Life Balance", 
                           "Manager Rating", 
                           "Job Satisfaction", 
                           "Years at Company", 
                           "Salary")) + 
  theme_classic()

Discussion:

Provide your discussion here.

The plot represents the odds ratios of various factors in relation to employee attrition, based on a logistic regression model. The graph shows model coefficientsfor key variables, including salary, years at the company, job satisfaction, manager rating, and work-life balance. Each point represents the odds ratio for a variable, with the horizontal axis displaying the values of the odds ratios and the vertical line at 1.00 indicating the baseline (no effect). Confidence intervals for each variable are also shown, and variables with significant results are marked with asterisks (***). Let’s discuss the interpretation of each variable in detail.

1) Salary (Odds Ratio: 1.00)

  • The odds ratio for salary is exactly 1.00, meaning that salary itself does not significantly influence the likelihood of attrition. A value of 1.00 indicates no effect on the odds of an employee leaving the company.

  • Interpretation: Despite the weak positive correlation seen in previous analysis, salary does not appear to be a statistically significant factor when controlling for other variables. This suggests that the effect of salary on attrition is neutral — salary alone neither increases nor decreases the likelihood of employees leaving, at least within the ranges analyzed.

  • The three asterisks (***) indicate that the coefficient for salary is statistically significant, meaning that even though its effect on the odds of attrition is neutral (1.00), the model is confident in this result.

2) Years at Company (Odds Ratio: 0.53)

  • The odds ratio for years at the company is 0.53, which is significantly less than 1.00. This indicates that employees who have been with the company for a longer period are less likely to leave. In fact, for every additional year at the company, the odds of an employee leaving decrease by nearly half (47% decrease, based on the odds ratio of 0.53).

  • Interpretation: The negative association between tenure and attrition makes sense, as employees who have been at the company longer may feel more committed, secure, or invested in their careers with the organization. This result is highly significant, as indicated by the three asterisks (***) next to the odds ratio.

  • The result implies that newer employees are more likely to leave, possibly due to issues with onboarding, adjustment, or lack of long-term attachment to the organization.

3) Job Satisfaction (Odds Ratio: 1.04)

  • The odds ratio for job satisfaction is 1.04, which suggests a slight positive effect on attrition. This means that for every unit increase in job satisfaction, the odds of an employee leaving increase by 4%.

  • Interpretation: This result is somewhat counterintuitive because one might expect higher job satisfaction to reduce attrition. However, the effect is extremely weak, and it is possible that other factors, such as career advancement or external opportunities, are more important in this particular company’s context. The confidence interval for job satisfaction seems wide, and it is not statistically significant (no asterisks), suggesting that job satisfaction’s effect on attrition is not definitive in this analysis.

4) Manager Rating (Odds Ratio: 1.01)

  • The odds ratio for manager rating is 1.01, meaning that there is virtually no effect of how employees rate their managers on the likelihood of leaving the company. A value very close to 1 indicates that this variable does not significantly influence attrition in this context.

  • Interpretation: Although one might expect that higher ratings of managers would lead to lower turnover, this analysis does not show a strong relationship. It could be that management practices are consistent across the organization, or that factors like salary, work-life balance, or external opportunities are more influential. The lack of significance for manager rating (no asterisks) supports the conclusion that it is not a key driver of attrition in this dataset.

5) Work-Life Balance (Odds Ratio: 1.03)

  • The odds ratio for work-life balance is 1.03, meaning that better work-life balance slightly increases the odds of attrition by 3%. This result is counterintuitive, as better work-life balance is typically expected to reduce turnover.

  • Interpretation: Similar to job satisfaction, the effect of work-life balance is weak and not statistically significant. It’s possible that other factors (such as external job offers or career advancement) are more important in determining whether employees leave. Another possibility is that employees with better work-life balance may feel more confident in seeking opportunities elsewhere without being tied down by work stress or obligations.

The logistic regression model provides valuable insights into the factors influencing employee attrition. Years at the company is the only variable that shows a strong and statistically significant effect, with longer tenured employees being far less likely to leave. This result aligns with the idea that employee retention tends to increase with tenure, possibly due to a stronger sense of belonging or loyalty over time.

On the other hand, variables like salary, job satisfaction, manager rating, and work-life balance do not show strong effects on attrition. Salary’s odds ratio is neutral, indicating it doesn’t directly influence the likelihood of employees leaving. Meanwhile, the positive odds ratios for job satisfaction and work-life balance are counterintuitive, but they are very small and not statistically significant, so they may not be important drivers in this context.

The lack of significance for job satisfaction and manager rating may imply that the organization has relatively consistent policies and practices, meaning these factors do not vary enough to drive attrition. The findings suggest that turnover in this company might be influenced more by external factors, such as labor market conditions or personal circumstances, rather than internal variables like job satisfaction or work-life balance.

This analysis provides a nuanced understanding of the drivers of attrition, suggesting a need to look beyond traditional internal factors and consider broader influences on employee turnover.

5.4 Analysis of compensation and turnover

Task 5.4. Analyzing compensation and turnover
  • Compare the average monthly income of employees who left the company (bi_attrition = 1) and those who stayed (bi_attrition = 0). Use the t.test function to conduct a t-test and determine if there is a significant difference in average monthly income between the two groups. Save the results in a variable called attrition_ttest_results.

  • Install the report package and use the report function to generate a report of the t-test results.

  • Install the ggstatsplot package and use the ggbetweenstats function to visualize the distribution of monthly income for employees who left and those who stayed. Make sure to map the bi_attrition variable to the x argument and the salary variable to the y argument.

  • Visualize the salary variable for employees who left and those who stayed using geom_histogram with geom_freqpoly. Make sure to facet the plot by the bi_attrition variable and apply alpha on the histogram plot.

  • Provide recommendations on whether revising compensation policies could be an effective retention strategy.

## compare the average monthly income of employees who left and those who stayed
attrition_ttest_results <- t.test(salary ~ bi_attrition, data = hr_perf_dta)


## print the results of the t-test
print(attrition_ttest_results)

    Welch Two Sample t-test

data:  salary by bi_attrition
t = 18.869, df = 5524.2, p-value < 2.2e-16
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 38577.82 47523.18
sample estimates:
mean in group 0 mean in group 1 
      125007.26        81956.76 
## install the report package and use the report function to generate a report of the t-test results
library(report)
library(broom)
library(knitr)  
library(gtable)     

attrition_ttest_results <- t.test(salary ~ bi_attrition, data = hr_perf_dta)
attrition_report <- report(attrition_ttest_results)
print(attrition_report)  
Effect sizes were labelled following Cohen's (1988) recommendations.

The Welch Two Sample t-test testing the difference of salary by bi_attrition
(mean in group 0 = 1.25e+05, mean in group 1 = 81956.76) suggests that the
effect is positive, statistically significant, and medium (difference =
43050.50, 95% CI [38577.82, 47523.18], t(5524.24) = 18.87, p < .001; Cohen's d
= 0.51, 95% CI [0.45, 0.56])
#This will convert the t-tect into a tidy data frame 
attrition_ttest_df <- tidy(attrition_ttest_results)
kable(attrition_ttest_df, caption = "T-test Results for Salary Based on Employee Attrition")
T-test Results for Salary Based on Employee Attrition
estimate estimate1 estimate2 statistic p.value parameter conf.low conf.high method alternative
43050.5 125007.3 81956.76 18.8692 0 5524.236 38577.82 47523.18 Welch Two Sample t-test two.sided
# install ggstatsplot package and use ggbetweenstats function to visualize the distribution of monthly income for employees who left and those who stayed
library(ggstatsplot)

ggbetweenstats(
  data = hr_perf_dta,               
  x = bi_attrition,                 
  y = salary,                       
  title = "Distribution of Salary for Employees Who Left vs. Those Who Stayed",
  xlab = "Attrition (Yes = Left, No = Stayed)",
  ylab = "Monthly Salary (in Thousands)",
  plot.type = "boxviolin",          
  centrality.plotting = TRUE,       
  bf.message = FALSE                
) +
  scale_y_continuous(labels = scales::comma_format(scale = 0.001))  # Convert to thousands

# create histogram and frequency polygon of salary for employees who left and those who stayed
# Load necessary libraries
library(ggplot2)

# Convert bi_attrition to a factor
hr_perf_dta$bi_attrition <- factor(hr_perf_dta$bi_attrition, levels = c(0, 1), labels = c("Stayed", "Left"))

# Create the plot with geom_histogram and geom_freqpoly
salary_hist_freqpoly_plot <- ggplot(hr_perf_dta, aes(x = salary, fill = bi_attrition)) + 
  geom_histogram(alpha = 0.5, position = "identity", binwidth = 5000) +  # Custom binwidth for the histogram
  geom_freqpoly(aes(color = bi_attrition), binwidth = 5000, size = 1.2) +  # Custom binwidth for the frequency polygon
  facet_wrap(~ bi_attrition) +  # Facet the plot by attrition (left vs stayed)
  scale_x_continuous(labels = scales::comma_format(scale = 0.001), name = "Salary (in Thousands)") +  # x-axis in thousands
  scale_y_continuous(name = "Count") +  # y-axis as Count (frequency)
  scale_fill_manual(values = c("Stayed" = "steelblue", "Left" = "firebrick")) +  # Custom colors for the bins
  scale_color_manual(values = c("Stayed" = "steelblue", "Left" = "firebrick")) +  # Custom colors for the lines
  labs(title = "Salary Distribution for Employees Who Left vs. Those Who Stayed",
       fill = "Attrition", color = "Attrition") +  # Plot title and legend labels
  theme_classic()  # Apply a clean, minimal theme

# Print the plot
print(salary_hist_freqpoly_plot)

Discussion:

Provide your discussion here.

The plot illustrates the salary distribution of employees who stayed with the company versus those who left. The two distributions are shown side-by-side, with the blue distribution representing employees who stayed and the red distribution representing those who left. The horizontal axis indicates salary (in thousands of dollars), while the vertical axis shows the count of employees in each salary range.

My Key Observations:

1. Salary Range for Employees Who Stayed (Blue):

  • The majority of employees who stayed have salaries concentrated in the lower end of the salary spectrum, with a large peak between $0 and $100k.

  • As salary increases beyond $100k, the number of employees who stayed gradually decreases, and very few employees who stayed have salaries exceeding $300k.

  • This suggests that most of the employees who chose to remain with the company are relatively lower-earning employees, with a steep drop-off in retention among higher earners.

2. Salary Range for Employees Who Left (Red):

  • A similar trend is observed for employees who left, where the distribution also peaks between $0 and $100k, indicating that a large number of lower-earning employees left the company.

  • However, the key difference is that there is a noticeable number of employees across the entire salary range (up to $400k+) who left the company. The red distribution extends more evenly across higher salary bands compared to the blue distribution.

  • This suggests that not only lower-paid employees are leaving, but also a substantial number of higher-paid employees have chosen to leave, indicating attrition across a broader salary range.

Analysis and Interpretation:

  • High Attrition Among Lower-Salaried Employees: Both distributions show a significant concentration of lower-paid employees, indicating that a large portion of employees, regardless of whether they stayed or left, are in the lower salary range. This may be reflective of a workforce structure where many positions are lower-paying. However, the fact that many lower-paid employees have left could suggest dissatisfaction at these income levels, possibly due to perceived lack of growth opportunities, benefits, or competitive wages in the job market.

  • Higher Attrition Among High Earners: The red distribution shows that employees in higher salary brackets, extending well beyond $100k, have also left the company. This could indicate that even employees who are paid relatively well are finding better opportunities elsewhere or may not feel satisfied with non-monetary factors like career progression, work-life balance, or company culture. The fact that these high earners are leaving suggests that retention strategies may need to be reevaluated for top earners to keep them from seeking better offers elsewhere.

  • Disparity Between Stayers and Leavers in Upper Salary Bands: The most striking contrast between the two distributions is in the higher salary ranges. While the blue distribution (those who stayed) sharply declines after $100k, indicating that fewer high-salaried employees remain with the company, the red distribution (those who left) is more evenly spread across higher salary levels. This could indicate that employees in higher salary ranges feel more confident in finding competitive offers elsewhere, or that they may be looking for career advancements that the company isn’t providing.

Conclusion:

The salary distribution graph provides critical insights into attrition patterns within the company. While attrition is heavily concentrated among lower-paid employees, there is also a notable number of high-paid employees leaving the organization. This suggests that factors beyond salary, such as career development opportunities, organizational culture, and external job market competitiveness, may be playing a significant role in driving employee turnover. The company may need to focus on improving retention strategies not only for lower-income employees but also for those in higher salary bands, as their departure could result in a loss of critical talent and expertise.

5.5 Employee satisfaction and performance analysis

Task 5.5. Analyzing employee satisfaction and performance
  • Analyze the average performance ratings (both ManagerRating and SelfRating) of employees who left vs. those who stayed. Use the group_by and count functions to calculate the average performance ratings for each group.

  • Visualize the distribution of SelfRating for employees who left and those who stayed using a bar plot. Use the ggplot function to create the plot and map the SelfRating variable to the x argument and the bi_attrition variable to the fill argument.

  • Similarly, visualize the distribution of ManagerRating for employees who left and those who stayed using a bar plot. Make sure to map the ManagerRating variable to the x argument and the bi_attrition variable to the fill argument.

  • Create a boxplot of salary by job_satisfaction and bi_attrition to analyze the relationship between salary, job satisfaction, and attrition. Use the geom_boxplot function to create the plot and map the salary variable to the x argument, the job_satisfaction variable to the y argument, and the bi_attrition variable to the fill argument. You need to transform the job_satisfaction and bi_attrition variables into factors before creating the plot or within the ggplot function.

  • Discuss the results of the analysis and provide recommendations for HR interventions based on the findings.

# Analyze the average performance ratings (both ManagerRating and SelfRating) of employees who left vs. those who stayed.
avg_ratings <- hr_perf_dta %>%
  group_by(bi_attrition) %>%
  summarise(
    avg_manager_rating = mean(manager_rating, na.rm = TRUE),
    avg_self_rating = mean(self_rating, na.rm = TRUE),
    count_employees = n()  
  )
# Visualize the distribution of SelfRating for employees who left and those who stayed using a bar plot.
ggplot(hr_perf_dta, aes(x = self_rating, fill = as.factor(bi_attrition))) +
  geom_bar(position = "dodge") + 
  labs(
    title = "Distribution of Self-Rating for Employees Who Stayed vs Left",
    x = "Self-Rating",
    y = "Count",
    fill = "Attrition (0 = Stayed, 1 = Left)"
  ) +
  theme_minimal()

# Visualize the distribution of ManagerRating for employees who left and those who stayed using a bar plot.
ggplot(hr_perf_dta, aes(x = manager_rating, fill = as.factor(bi_attrition))) +
  geom_bar(position = "dodge") +  
  labs(
    title = "Distribution of Manager Rating for Employees Who Stayed vs Left",
    x = "Manager Rating",
    y = "Count",
    fill = "Attrition (0 = Stayed, 1 = Left)"
  ) +
  theme_minimal()

# create a boxplot of salary by job_satisfaction and bi_attrition to analyze the relationship between salary, job satisfaction, and attrition.
ggplot(hr_perf_dta, aes(x = factor(job_satisfaction), y = salary, fill = factor(bi_attrition))) +
  geom_boxplot() +
  labs(
    title = "Salary Distribution by Job Satisfaction and Attrition Status",
    x = "Job Satisfaction",
    y = "Salary",
    fill = "Attrition (0 = Stayed, 1 = Left)"
  ) +
  scale_fill_manual(values = c("purple", "black")) + 
  theme_minimal()

Discussion:

Provide your discussion here.

Self-Rating Distribution:

The distribution of self-ratings among employees reveals a fascinating pattern in workplace dynamics. The graph demonstrates that employees predominantly rated themselves in the higher range of the scale, clustering between scores of 3 to 5. This high self-assessment trend is consistent across both groups - those who remained with the company and those who departed. Notably, approximately 1,500 employees who stayed rated themselves at each level (3, 4, and 5), while roughly 750 employees who left shared similar high self-perceptions. This relatively consistent ratio of stayers to leavers across all rating levels suggests that an employee’s self-assessment may not be a reliable predictor of their likelihood to remain with the organization. The minimal variation in attrition rates across different self-rating scores indicates that high self-perception of performance doesn’t necessarily translate to stronger organizational commitment or job satisfaction.

Manager Rating Distribution:

The manager rating distribution presents a more diverse and telling narrative about employee performance and retention. Unlike the self-ratings, manager assessments span a broader range from 2 to 5, offering a more differentiated view of employee performance. The data shows a clear correlation between manager ratings and employee retention. At the lower end of the scale (rating 2), there’s a notably higher proportion of departures relative to stays. The middle ratings (3-4) show the highest volume of both stayers and leavers, with approximately 1,500 employees receiving these scores. However, the ratio begins to favor retention as ratings improve. At the highest rating of 5, there’s a marked decrease in overall numbers, but with a significantly higher proportion of employees choosing to stay. This pattern suggests that manager assessments might be more predictive of employee turnover than self-ratings, possibly reflecting the impact of recognition and perceived value on employee retention decisions.

Salary Distribution by Job Satisfaction:

The salary distribution visualization offers complex insights into the relationship between compensation, job satisfaction, and employee retention. The box plot format reveals substantial salary variations across all job satisfaction levels (1-5), with numerous outliers represented by individual dots, particularly in the higher salary ranges. A crucial observation is that salary ranges remain relatively consistent across different satisfaction levels, suggesting that compensation alone doesn’t directly correlate with job satisfaction. The presence of high-salary outliers across all satisfaction levels, including those who left the organization, indicates that competitive compensation isn’t always sufficient to retain employees. The data shows similar salary distributions between those who stayed and those who left, challenging the assumption that higher pay automatically leads to better retention. The ‘NA’ category, representing missing satisfaction data, shows comparable salary distributions to other categories, suggesting that non-response to satisfaction surveys isn’t necessarily linked to compensation levels. This complex interplay between salary, satisfaction, and retention highlights the multifaceted nature of employee engagement and the need for comprehensive retention strategies beyond monetary incentives.

5.6 Work-life balance and retention strategies

Task 5.6. Analyzing work-life balance and retention strategies

At this point, you are already well aware of the dataset and the possible factors that contribute to employee attrition. Using your R skills, accomplish the following tasks:

  • Analyze the distribution of WorkLifeBalance ratings for employees who left versus those who stayed.

  • Use visualizations to show the differences.

  • Assess whether employees with poor work-life balance are more likely to leave.

You have the freedom how you will accomplish this task. Be creative and provide insights that will help HR develop effective retention strategies.

Discussion Based on The Results of the Graphs Below:

The graph shows a correlation between poor work-life balance and employee attrition. Employees who perceive their work-life balance as low are more likely to leave the company.Overall, the result suggests that work-life balance is an important factor to consider for employee retention. Employers should strive to create a supportive work environment that allows employees to achieve a healthy balance between their professional and personal lives. Moreover, the findings shows the attrition rate of employees based on their work-life balance rating. We can see that the attrition rate is highest for employees who have rated their work-life balance as “3” (34.7%), followed by those who rated it as “5” (34.2%) and “2” (33.4%). The attrition rate is slightly lower for employees who rated their work-life balance as “4” (32.8%), and lowest for those who rated it as “1” (30.6%). Employees who did not provide a rating have a 0% attrition rate, however it is unclear how many employees fall into this category. Based on this data, we can conclude that employees who report a poor work-life balance are more likely to leave their jobs. This could be due to several factors, such as feelings of being overworked, insufficient time for personal life, or lack of support from their employer. Further investigation into the specific reasons for attrition among these employees would be needed to understand the underlying causes and to devise strategies to retain employees with a poor work-life balance.

work_life_balance_summary <- hr_perf_dta %>%
  group_by(bi_attrition, work_life_balance) %>%
  summarise(count = n(), .groups = "drop")

print(work_life_balance_summary)
# A tibble: 11 × 3
   bi_attrition work_life_balance count
   <fct>                    <int> <int>
 1 Stayed                       1    84
 2 Stayed                       2  1134
 3 Stayed                       3  1090
 4 Stayed                       4  1146
 5 Stayed                       5   994
 6 Stayed                      NA   190
 7 Left                         1    37
 8 Left                         2   568
 9 Left                         3   580
10 Left                         4   560
11 Left                         5   516
##Use visualizations to show the differences.

# Create the bar plot for WorkLifeBalance
ggplot(hr_perf_dta, aes(x = factor(work_life_balance), fill = factor(bi_attrition))) +
  geom_bar(position = "dodge") +
  labs(
    title = "Distribution of Work-Life Balance for Employees Who Stayed vs Left",
    x = "Work-Life Balance Rating",
    y = "Count",
    fill = "Attrition (0 = Stayed, 1 = Left)"
  ) +
  theme_minimal() + 
  scale_fill_manual(values = c("purple4", "navajowhite1")) +
  theme_classic()

##Assess whether employees with poor work-life balance are more likely to leave.

# Compute attrition rate by Work-Life Balance rating
attrition_rate_wlb <- hr_perf_dta %>%
  group_by(work_life_balance) %>%
  summarise(
    total_employees = n(),
    total_attrition = sum(bi_attrition == "Left", na.rm = TRUE),  # Count where attrition is "Left"
    attrition_rate = (total_attrition / total_employees) * 100  # Calculate attrition rate as percentage
  )

# Print the attrition rate summary
print(attrition_rate_wlb)
# A tibble: 6 × 4
  work_life_balance total_employees total_attrition attrition_rate
              <int>           <int>           <int>          <dbl>
1                 1             121              37           30.6
2                 2            1702             568           33.4
3                 3            1670             580           34.7
4                 4            1706             560           32.8
5                 5            1510             516           34.2
6                NA             190               0            0  
# Visualize the attrition rate by WorkLifeBalance

ggplot(attrition_rate_wlb, aes(x = factor(work_life_balance), y = attrition_rate)) +
  geom_col(fill = "purple4", color = "black") +  
  geom_text(aes(label = paste0(round(attrition_rate, 1), "%")),
            vjust = -0.5, size = 3.5) +
  labs(
    title = "Attrition Rate by Work-Life Balance Rating",
    x = "Work-Life Balance Rating",
    y = "Attrition Rate (%)"
  ) +
  theme_classic()

5.7 Recommendations for HR interventions

Task 5.7. Recommendations for HR interventions

Based on the analysis conducted, provide recommendations for HR interventions that could help reduce employee attrition and improve overall employee satisfaction and performance. You may use the following question as guide for your recommendations and discussions.

  • What are the key factors contributing to employee attrition in the company?

  • Which factors are most strongly correlated with attrition?

  • What strategies could be implemented to improve employee retention and satisfaction?

  • How can HR leverage the insights from the analysis to develop effective retention strategies?

  • What are the potential benefits of implementing these strategies for the company?

    Answer/Discussion Based on the Questions above:

    Based on the analysis conducted, there are several key factors contributing to employee attrition in the company that HR should focus on for developing effective retention strategies. The key factors contributing with employee attrition appear to be job level, overtime, years at the company, and work-life balance. When examining correlations with attrition, salary emerges as the strongest factor, though with a relatively modest correlation of years at the company shows a significant negative correlation, reinforcing the importance of employee tenure in retention. The most significant finding is that higher-salaried employees demonstrate an increased likelihood of leaving the company. This suggests that competitive market opportunities may be attracting top talent away from the organization. This is somewhat unexpected, as salary is typically seen as a factor that enhances employee retention. However, it may suggest that higher-paid employees are more competitive in the job market and have access to better external opportunities, leading them to leave for higher-level roles or promotions that the current company may not be able to offer. Additionally, tenure plays a crucial role, with newer employees showing a higher propensity to leave, indicating potential issues with onboarding and early career development. Manager ratings demonstrate varying impacts, with lower-rated employees showing higher attrition rates. There’s also a notable disconnect between self-ratings and manager ratings, pointing to possible communication gaps and misaligned expectations in performance evaluation processes. Interestingly, traditional retention factors like work-life balance and job satisfaction show minimal direct correlation with attrition, suggesting more complex underlying dynamics.

    To address these challenges, several strategic interventions could be implemented:

  • First, a comprehensive early career support system should be established, focusing on thorough onboarding programs and mentorship initiatives. HR should focus on career development and progression opportunities, especially for employees in lower job levels who may feel stagnant. This could include creating clearer career pathways, offering more training and upskilling programs, and implementing a formal mentorship program to help employees advance. Regular career discussions between managers and employees could help identify growth opportunities and keep employees engaged. This is particularly crucial given the higher attrition rates among newer employees. The program should include structured orientation periods, regular check-ins, and clear career progression pathways to help new hires integrate effectively and see their long-term potential within the organization. Moreover, the the company should review and optimize its overtime policies and practices. Excessive overtime is strongly linked to attrition, likely due to burnout and poor work-life balance. HR could work with managers to better distribute workloads, hire additional staff where needed, and set clearer boundaries around expected work hours. Implementing flexible work arrangements or compressed work weeks could also help employees better manage their time and reduce burnout.

  • The compensation structure requires careful attention, particularly for high-earning employees who show increased attrition risk. Regular market analysis should be conducted to ensure competitiveness, and retention bonuses could be implemented for key talent. Beyond base salary, the organization should develop comprehensive benefits packages that address various employee needs and life stages, making it more challenging for competitors to attract away valuable team members. Improving work-life balance should be a key priority. In addition to addressing overtime issues, HR could introduce or enhance policies around paid time off, parental leave, and sabbaticals. Promoting a culture that respects personal time and discourages after-hours work communications could also have a significant positive impact.

  • Performance management systems need significant enhancement to address the gap between self and manager ratings. This includes implementing more frequent and structured feedback sessions, providing training for managers on effective evaluation techniques, and establishing transparent performance metrics. Clear promotion criteria and career development paths should be created to give employees a better understanding of their growth opportunities within the organization. HR should pay special attention to employees in their first few years at the company, as attrition risk appears higher for newer employees. Enhancing onboarding processes, providing extra support and check-ins for new hires, and fostering social connections through team-building activities could help improve retention of newer staff.

    HR can leverage these insights by adopting a data-driven approach to retention strategies. This involves regular monitoring of attrition patterns, tracking the effectiveness of interventions, and conducting detailed exit interviews to gather additional insights. Particular attention should be paid to departments or roles with higher turnover rates, allowing for targeted interventions where they’re most needed. The analysis suggests that preventive measures should focus especially on early-tenure employees and high-earning professionals. By leveraging these insights to develop targeted retention strategies, HR can potentially realize significant benefits for the company. Reducing attrition would lower recruitment and training costs, preserve institutional knowledge, and maintain team cohesion and productivity. Improved work-life balance and career development opportunities are likely to boost overall employee satisfaction, engagement, and performance. This in turn can enhance the company’s reputation as an employer of choice, making it easier to attract top talent in the future. Ultimately, by addressing the root causes of attrition identified in the analysis, HR can create a more positive and sustainable work environment that benefits both employees and the organization as a whole. Regular monitoring and analysis of workforce data will be crucial for HR to continually refine these strategies and measure their effectiveness over time.

    The benefits of implementing these strategies are substantial and multifaceted. Financially, the organization can expect reduced recruitment and training costs, improved productivity, and better resource utilization. From an organizational perspective, benefits include enhanced employee engagement, better knowledge retention, and improved succession planning. Performance benefits encompass better alignment of expectations, more effective feedback processes, and increased productivity through stable teams. Long-term strategic advantages include a stronger employer brand, enhanced ability to attract top talent, and improved market competitiveness. The organization can expect to build more robust internal capabilities and achieve more sustainable growth through stable, engaged teams. These improvements contribute to a positive cycle where better retention leads to stronger organizational performance, which in turn supports further retention improvements. Implementation should begin with high-priority areas, particularly addressing the needs of new employees and high-earning professionals who show the highest attrition risk. Regular monitoring of key metrics will be essential to track progress and adjust strategies as needed. Consistent communication throughout the implementation process will help ensure buy-in from all stakeholders and support the successful adoption of new initiatives. Through these comprehensive interventions, the organization can work to reduce attrition rates while simultaneously improving employee satisfaction and performance. The key is to recognize that retention is a multifaceted challenge requiring a balanced approach that addresses both immediate concerns and long-term organizational health. By implementing these recommendations systematically and monitoring their effectiveness, the organization can build a more stable, engaged, and high-performing workforce.